# -*- coding: utf-8 -*-
# @Time : 2023/11/10 8:28 PM 
# @Author : Wayne
# @Email : 1
# @File : time_utils.py
# @Project : python_demo
# @DESCRIPTION :


from datetime import datetime, timedelta

'''
获取当前时间文本（格式：%Y-%m-%d %H:%M:%S）函数
'''


def get_current_datetime():
    from datetime import datetime
    current_datetime = datetime.now()
    current_datetime_str = current_datetime.strftime("%Y-%m-%d %H:%M:%S")
    return current_datetime_str


def get_current_date():
    from datetime import datetime
    current_datetime = datetime.now()
    current_datetime_str = current_datetime.strftime("%Y-%m-%d")
    return current_datetime_str

print(get_current_date())


"""
通过规则添加天数问题
num 负数为之前天数 注意点：日期获取的是年月日00:00:00,7天的23:59:59,也就是+8
hours 小时,days 天数 ,minutes 分钟
"""


def getNumDay(num, current_date):
    # 获取当前日期
    # current_date = datetime.now().date()
    # 加1天
    new_date = current_date + timedelta(days=num)
    return new_date


# 不传日期以当天为主 与上面的一样的，只是加了判断是否传入时间为空，此方法可以不用
def getNumDay2(num, current_date):
    # 获取当前日期
    if current_date == "" or current_date is None:
        current_date = datetime.now().date()
    # 加1天
    new_date = current_date + timedelta(days=num)
    start_time_str = new_date.strftime("%Y-%m-%d 00:00:00")
    return start_time_str


"""
方法一
获取当前当前时间的时间戳毫秒级别
"""


def get_now_time_stamp1():
    import time
    # 获取当前时间的毫秒级时间戳
    timestamp = int(time.time() * 1000)
    return timestamp


"""
方法二
获取当前当前时间的时间戳毫秒级别
"""


def get_now_time_stamp2():
    from datetime import datetime
    # 获取当前时间
    now = datetime.now()
    # 转换为毫秒级时间戳
    timestamp = int(datetime.timestamp(now) * 1000)
    return timestamp


'''
传入时间文本转时间戳函数
时间格式可以自己定义的，看具体需求 %Y-%m-%d %H:%M:%S
'''


def datetime_to_timestamp(datetime_text):
    import time
    time_struct = time.strptime(datetime_text, '%Y-%m-%d')
    timestamp = time.mktime(time_struct)
    return int(timestamp)


"""
非当前时间获取时间戳，以传入时间为准,且格式化
"""


def get_time_stamp_send_time(time_str):
    from datetime import datetime
    # 对时间进行格式化
    start_datetime = datetime.strptime(time_str, "%Y-%m-%d %H:%M:%S")
    # 转换为毫秒级时间戳
    timestamp = int(datetime.timestamp(start_datetime) * 1000)
    return timestamp


"""
计算两时间相差多少天，取了abs绝对值，
默认加1天，否则当天就是0l，此是根据各自业务场景判断是否加 1
"""


def calculate_two_day_differ_num(start_date, end_date):
    from datetime import datetime
    # start_date = "2023-01-01"
    # end_date = "2023-06-14"
    start_datetime = datetime.strptime(start_date, "%Y-%m-%d")
    end_datetime = datetime.strptime(end_date, "%Y-%m-%d")
    delta = end_datetime - start_datetime
    days = delta.days
    # 是否为负数就看自己加abs
    # 当天学完是为1天，那么就+1
    return abs(days) + 1
